package com.mercury.pattern._01_singleton.lazy.type02;

/**
 * 懒汉式2：线程安全，但效率不高式
 */
public class SingletonTest02 {
    public static void main(String[] args) {
        Singleton instance = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();
        System.out.println(instance == instance2);
        System.out.println(instance.hashCode());
        System.out.println(instance2.hashCode());
    }
}

class Singleton{
    /**
     * 1、私有构造方法
     * 2、私有静态变量
     * 3、对象在调用方法的时候才会创建，用同步方法
     */
    private static Singleton instance;

    private Singleton(){

    }

    // 线程安全，但是效率低；每次获取对象的时候，不管有没有都会进入同步方法
    public static synchronized  Singleton getInstance() {
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}
